package handlers

import (
	"github.com/gofiber/fiber/v2"
	"go_test/config"
	"go_test/models"
)

// 获取所有产品
func GetAllProducts(c *fiber.Ctx) error {
	var products []models.Product
	config.DB.Raw("select * from products").Scan(&products)
	return c.JSON(products)
}

// 获取单个产品
func GetProductByID(c *fiber.Ctx) error {
	id, err := c.ParamsInt("id")
	if err != nil {
		return c.JSON(config.Error("Invalid product ID"))
	}
	var product models.Product
	config.DB.Raw("select * from products where id = ?", id).Scan(&product)

	if product != (models.Product{}) {
		return c.JSON(product)
	}
	return c.JSON(config.Error("Product not found"))
}

// 创建新产品
func CreateProduct(c *fiber.Ctx) error {
	var newProduct models.Product

	// 反序列化请求体
	if err := c.BodyParser(&newProduct); err != nil {
		return c.JSON(config.Error("Cannot parse JSON"))
	}

	// 简单的数据验证
	if newProduct.Name == "" {
		return c.JSON(config.Error("Product name is required"))
	}

	// 分配新ID
	config.DB.Create(&newProduct)

	return c.Status(fiber.StatusCreated).JSON(newProduct)
}

// 更新产品
func UpdateProduct(c *fiber.Ctx) error {
	_, err := c.ParamsInt("id")
	if err != nil {
		return c.JSON(config.Error("Invalid product ID"))
	}

	var updateData models.Product
	if err := c.BodyParser(&updateData); err != nil {
		return c.JSON(config.Error("Cannot parse JSON"))
	}

	config.DB.Model(&updateData).Updates(&updateData)

	return c.JSON(config.DefaultSuccess())
}

// 删除产品
func DeleteProduct(c *fiber.Ctx) error {
	id, err := c.ParamsInt("id")
	if err != nil {
		return c.JSON(config.Error("Invalid product ID"))
	}
	config.DB.Delete(&models.Product{}, id)
	return c.JSON(config.DefaultSuccess())
}
